/**
  ******************************************************************************
  * @file    psmc.c
  * @author  ashuai0110
  * @version V1.0
  * @date    2024-01-24
  * @brief   psmc驱动,适用于PIC16(L)F1788_9
  *
  ******************************************************************************
  * @attention
  *
  * Change Logs:
  * Date          Author        Notes
  * 2024-01-22    ashuai0110    完成基本内容
  *
  ******************************************************************************
  */

/* 包含头文件-----------------------------------------------------------------*/
#include "psmc.h"

/* 私有宏定义-----------------------------------------------------------------*/

/* 私有类型定义---------------------------------------------------------------*/

/* 私有变量-------------------------------------------------------------------*/

/* 全局变量-------------------------------------------------------------------*/

/* 私有函数原型---------------------------------------------------------------*/

/**
  * @brief  psmc1(高级pwm)初始化
  * @note   
  * @param  ch : 输出的通道 @ref psmc_channel
  * @retval None
  */
void psmc1_init(uint8_t ch)
{
    PSMC1CONbits.P1MODE = 0; /* 工作模式 0:单向PWM 1:单向互补PWM */
    PSMC1MDL = 0; /* 调制控制 */
    PSMC1SYNC = 0; /* 同步控制 */
    PSMC1CLKbits.P1CPRE = 1; /* 预分频比选择位 0:1  1:2  2:4  3:8 */
    PSMC1CLKbits.P1CSRC = 0; /* 时钟源选择位 0:Fosc  1:PLL的64MHz  2:PSMCxCLK引脚 */
    
    PSMC1OEN = ch; /* 输出使能控制(bit5~0:F~E)  0:无输出  1:输出有效 */
    PSMC1POL = 0; /* 极性控制(bit5~0:F~E) 0:高电平有效  1:低电平有效 */
    
    P1PHST = 1; /* 基于时基匹配发生上升沿事件 0:不发生  1:发生 */
    P1DCST = 1; /* 基于时基匹配发生下降沿事件 0:不发生  1:发生 */
    P1PRST = 1; /* 基于时基匹配发生周期事件 0:不发生  1:发生 */
    
    PSMC1ASDC = 0; /* 自动关闭控制 不启用自动关闭 */
    PSMC1ASDL = 0; /* 自动关闭输出电平选择 0:逻辑0  1:逻辑1 */
    PSMC1ASDS = 0; /* 自动关闭源 */
    
    PSMC1STR0 = ch; /* PSMC转向控制0(bit5~0:F~E)  0:转向无效  1:转向有效 */
    PSMC1STR1 = 0; /* PSMC转向控制1 */
    
    PSMC1_CMD(0); /* psmc1开关控制 */
}
